package com.authine.cloudpivot.common.extension.client;

import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.authine.cloudpivot.common.extension.client.dto.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 组织同步获取数据源服务扩展点默认扩展API
 * <p>
 * 请勿修改任何内容
 */
@FeignClient(name = "app-commonserviceextension", path = "/orgsync/v1")
public interface OrgDataSourceExtensionFeignServiceI {

    @GetMapping("/get_jsapi_ticket")
    SingleResponse<String> getJsapiTicket(@RequestParam(name = "corpId") String corpId);

    @GetMapping("/get_access_token")
    SingleResponse<String> getAccessToken(@RequestParam(name = "corpId") String corpId);

    /**
     * 获取所有标签
     * 全量同步使用
     *
     * @param corpId 企业id6
     * @return 标签集合
     */
    @GetMapping("/list_label")
    MultiResponse<LabelDTO> listLabel(@RequestParam(name = "corpId") String corpId);

    /**
     * 获取所有部门
     * 全量同步使用
     *
     * @param corpId 企业id
     * @return 部门集合
     */
    @GetMapping("/list_department")
    MultiResponse<DepartmentDTO> listDepartment(@RequestParam(name = "corpId") String corpId);

    /**
     * 获取指定部门信息
     * 增量同步使用
     *
     * @param corpId 企业id
     * @param deptId 部门id
     * @return 部门
     */
    @GetMapping("/get_department")
    SingleResponse<DepartmentDTO> getDepartment(@RequestParam(name = "corpId") String corpId, @RequestParam(name = "deptId") String deptId);

    /**
     * 获取指定用户的信息
     * 全量/增量同步使用
     *
     * @param corpId 企业id
     * @param id     用户id
     * @return 用户
     */
    @GetMapping("/get_user")
    SingleResponse<UserDTO> getUser(@RequestParam(name = "corpId") String corpId, @RequestParam(name = "id") String id);

    /**
     * 根据部门ID获取所有用户
     * 全量同步使用
     *
     * @param corpId       企业id
     * @param departmentId 部门id
     * @return 用户集合
     */
    @GetMapping("/list_user_by_department_id")
    MultiResponse<UserDTO> listUsersByDepartmentId(@RequestParam(name = "corpId") String corpId, @RequestParam(name = "departmentId") String departmentId);

    /**
     * 根据标签ID获取所有用户
     * 全量/增量同步使用
     *
     * @param corpId 企业id
     * @param labelId  标签id
     * @return 用户集合
     */
    @GetMapping("/list_user_by_label_id")
    MultiResponse<UserDTO> listUsersByLabelId(@RequestParam(name = "corpId") String corpId, @RequestParam(name = "labelId") String labelId);

    /**
     * 根据标签ID获取标签详情
     * 全量/增量同步使用
     *
     * @param corpId 企业id
     * @param labelId  标签id
     * @return 标签
     */
    @GetMapping("/get_label_by_id")
    SingleResponse<LabelDTO> getLabelById(@RequestParam(name = "corpId") String corpId, @RequestParam(name = "labelId") String labelId);

    /**
     * 获取所有标签分类
     * 全量同步使用
     *
     * @param corpId 企业id
     * @return 标签分类集合
     */
    @GetMapping("/list_label_group")
    MultiResponse<LabelGroupDTO> listLabelGroup(@RequestParam(name = "corpId") String corpId);

    /**
     * 增量同步
     *
     * @param params 同步参数
     * @return 同步结果
     */
    @PostMapping("/increment_sync")
    SingleResponse<OrgIncrementDTO> incrementSync(@RequestBody Object params);

}
